Analysis of COVID-19 pandemic in INDIA

What is Corona Virus(COVID-19)?

Coronavirus is a family of viruses that can cause illness, which can vary from common cold and cough to sometimes more severe disease. SARS-CoV-2 (n-coronavirus) is the new virus of the coronavirus family, which first discovered in 2019, which has not been identified in humans before. It is a contiguous virus which started from Wuhan in December 2019. Which later declared as Pandemic by WHO due to high rate spreads throughout the world. Currently (on date 27 March 2020), this leads to a total of 24K+ Deaths across the globe, including 16K+ deaths alone in Europe.Pandemic is spreading all over the world; it becomes more important to understand about this spread. This NoteBook is an effort to analyze the cumulative data of confirmed, deaths, and recovered cases over time. In this notebook, the main focus is to analyze the spread trend of this virus all over the india.

History of COVID-19 in India

On January 30, India reported its first case of COVID-19 in Kerala, which rose to three cases by February 3; all were students who had returned from Wuhan, China.No significant rise in cases was seen in the rest of February.

On 22 March 2020, India observed a 14-hour voluntary public curfew at the instance of the prime minister Narendra Modi.The government followed it up with lockdowns in 75 districts where COVID cases had occurred as well as all major cities.Further, on 24 March, the prime minister ordered a nationwide lockdown for 21 days, affecting the entire 1.3 billion population of India.

The transmission escalated during March, after several cases were reported all over the country, most of which were linked to people with a travel history to affected countries. On 12 March, a 76-year-old man who had returned from Saudi Arabia became the first victim of the virus in the country.On 4 March, 22 new cases came to light, including those of an Italian tourist group with 14 infected members.But number of cases start increasing dramtically after 19th March, but in the month of April it has been its peak.

Experts suggest the number of infections could be much higher as India's testing rates are among the lowest in the world.The infection rate of COVID-19 in India is reported to be 1.7, significantly lower than in the worst affected countries.

Source: Wikipedia

from IPython.display import * 
Image("https://media.foxbusiness.com/BrightCove/854081161001/202003/2652/854081161001_6141155653001_6141149610001-vs.jpg")

Collecting data

import warnings
warnings.filterwarnings("ignore")
!pip install --upgrade plotly
Collecting plotly
  Downloading https://files.pythonhosted.org/packages/27/99/9794bcd22fae2e12b689759d53fe26939a4d11b8b44b0b7056e035c64529/plotly-4.8.2-py2.py3-none-any.whl (11.5MB)
     |████████████████████████████████| 11.5MB 340kB/s 
Requirement already satisfied, skipping upgrade: retrying>=1.3.3 in /usr/local/lib/python3.6/dist-packages (from plotly) (1.3.3)
Requirement already satisfied, skipping upgrade: six in /usr/local/lib/python3.6/dist-packages (from plotly) (1.12.0)
Installing collected packages: plotly
  Found existing installation: plotly 4.4.1
    Uninstalling plotly-4.4.1:
      Successfully uninstalled plotly-4.4.1
Successfully installed plotly-4.8.2
import json
token = {"username":"abshkpskr","key":"7bf37d08aafdc81ecb2640a1960fddbc"}
with open('kaggle.json', 'w') as file:
    json.dump(token, file)

!mkdir ~/.kaggle
!cp kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
!kaggle datasets download -d imdevskp/covid19-corona-virus-india-dataset
Downloading covid19-corona-virus-india-dataset.zip to /content
  0% 0.00/1.40M [00:00<?, ?B/s]
100% 1.40M/1.40M [00:00<00:00, 76.1MB/s]
from zipfile import ZipFile
ZipFile('covid19-corona-virus-india-dataset.zip').extractall()

import os
for i in sorted(os.listdir()):
    print(i)
.config
README.md
api.ipynb
complete.csv
covid19-corona-virus-india-dataset.zip
district_level_latest.csv
kaggle.json
nation_level_daily.csv
patients_data.csv
sample_data
state_level_daily.csv
state_level_latest.csv
tests_day_wise.csv
tests_state_wise.csv
web_scraping.ipynb
#libraries for data management
import numpy as np
import pandas as pd

#libraries for visualization
import matplotlib.pyplot as plt
import seaborn as sns
import plotly
import plotly.express as px
import plotly.graph_objs as go
import folium 

from google.colab import files
from IPython.display import *

# plotly.io.renderers.default = 'colab'
plotly.offline.init_notebook_mode(connected=True)
data = pd.read_csv('complete.csv')
district_data = pd.read_csv('district_level_latest.csv')
state_data = pd.read_csv('state_level_latest.csv')
nation_data = pd.read_csv('nation_level_daily.csv')

patients_data = pd.read_csv('patients_data.csv')

tests_data = pd.read_csv('tests_day_wise.csv')
state_tests_data = pd.read_csv('tests_state_wise.csv')

zones = pd.read_csv('https://raw.githubusercontent.com/AbshkPskr/Covid-19-Analysis/master/India%20Covid%20Zones.csv')
data
Date Name of State / UT Latitude Longitude Total Confirmed cases Death Cured/Discharged/Migrated New cases New deaths New recovered
0 2020-01-30 Kerala 10.8505 76.2711 1 0 0 0 0 0
1 2020-01-31 Kerala 10.8505 76.2711 1 0 0 0 0 0
2 2020-02-01 Kerala 10.8505 76.2711 2 0 0 1 0 0
3 2020-02-02 Kerala 10.8505 76.2711 3 0 0 1 0 0
4 2020-02-03 Kerala 10.8505 76.2711 3 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ...
3680 2020-07-08 Telangana 18.1124 79.0193 27612 313 16287 1879 7 1506
3681 2020-07-08 Tripura 23.9408 91.9882 1704 1 1248 24 0 29
3682 2020-07-08 Uttar Pradesh 26.8467 80.9462 29968 827 19627 1332 18 518
3683 2020-07-08 Uttarakhand 30.0668 79.0193 3230 43 2621 69 1 35
3684 2020-07-08 West Bengal 22.9868 87.8550 23837 804 15790 850 25 555

3685 rows × 10 columns

data = data.drop(['New cases','New deaths','New recovered'],axis = 1)
data.columns = ['date','state','lat','long','confirmed','deaths','recovered']
data = data[['lat','long','state','date','confirmed','deaths','recovered']]

data.loc[(data['state'] == 'Union Territory of Ladakh'),'state'] = 'Ladakh'
data.loc[(data['state'] == 'Union Territory of Jammu and Kashmir'),'state'] = 'Jammu and Kashmir'
data.loc[(data['state'] == 'Telengana'),'state'] = 'Telangana'
data.loc[(data['state'] == 'Odisha'),'state'] = 'Orissa'
data.loc[(data['state'] == 'Union Territory of Chandigarh'),'state'] = 'Chandigarh'
bing_data = pd.read_csv('https://raw.githubusercontent.com/microsoft/Bing-COVID-19-Data/master/data/Bing-COVID19-Data.csv',index_col = 'ID')
bing_data = bing_data[(bing_data['Country_Region'] == 'India')]# & (bing_data['Latitude'] != 22.49312) & (bing_data['Longitude'] != 79.72701)]
bing_data = bing_data.drop(['ISO2','ISO3','Country_Region'],axis = 1)
bing_data.columns = ['date','confirmed','new_confirmed','deaths','new_deaths','recovered','new_recovered','lat','long','state','city']
bing_data['active'] = bing_data['confirmed'] - (bing_data['deaths'] + bing_data['recovered'])
bing_data = bing_data[(bing_data['state'] == 'Chandigarh') | 
                      (bing_data['state'] == 'Andaman and Nicobar Islands') |
                      (bing_data['city'].notna())]
# bing_data = bing_data[(bing_data['city'].isna())]
bing_data['city'] = bing_data['city'].replace(np.nan,"(Union Territory)")
bing_data = bing_data.replace(np.nan,0)
case_data = pd.DataFrame()

states = data['state'].unique()

for state in states:
    temp = data[(data['state'] == state)]
    temp1 = pd.DataFrame()
    temp1  = temp1.append(temp.iloc[0:1,:],ignore_index=True)
    temp1['new_confirmed'] = temp1['confirmed']
    temp1['new_deaths'] = temp1['deaths']
    temp1['new_recovered'] = temp1['recovered']
    for i in range(1,len(temp)):
        lat,lon,state,date,confirmed,death,recovered = temp.iloc[i].values
        new_confirmed = temp.iloc[i,4] - temp.iloc[i-1,4]
        new_deaths = temp.iloc[i,5] - temp.iloc[i-1,5]
        new_recovered = temp.iloc[i,6] - temp.iloc[i-1,6]
        if new_confirmed < 0:
            confirmed = temp.iloc[i-1][4]
            new_confirmed = 0
        if new_deaths < 0:
            deaths = temp.iloc[i-1][5]
            new_deaths = 0
        if new_recovered < 0:
            recovered = temp.iloc[i-1][6]
            new_recovered = 0
        temp1.loc[i] = [lat,lon,state,date,confirmed,death,recovered,new_confirmed,new_deaths,new_recovered]
    case_data = pd.concat([case_data,temp1],ignore_index=True)

#case_data
# case_data = bing_data[['date','state','city','confirmed','new_confirmed','deaths','new_deaths','recovered','new_recovered','lat','long']]
case_data['active'] = case_data['confirmed'] - (case_data['deaths'] + case_data['recovered'])
case_data['date'] = pd.to_datetime(case_data['date'])
case_data['confirmed']  = case_data['confirmed'].astype('int')
case_data['deaths']  = case_data['deaths'].astype('int')
case_data['recovered']  = case_data['recovered'].astype('int')
case_data['active']  = case_data['active'].astype('int')
case_data['new_confirmed']  = case_data['new_confirmed'].astype('int')
case_data['new_deaths']  = case_data['new_deaths'].astype('int')
case_data['new_recovered']  = case_data['new_recovered'].astype('int')
# case_data.loc[(case_data['state'] == ' Azerbaijan'),'state'] = 'Azerbaijan'

Data analysis

General Analysis

state_case_data = case_data.groupby(['state','date']).sum().reset_index()
state_case_data = state_case_data[state_case_data['date'] == max(state_case_data['date'].values)]
state_case_data = state_case_data.drop('date',axis = 1)
state_case_data = state_case_data.set_index('state')
state_case_data = state_case_data[['confirmed','new_confirmed','deaths','new_deaths',
                                       'recovered','new_recovered','active']]
state_case_data['mortality rate'] =  (state_case_data['deaths']/state_case_data['confirmed'])*100                          
state_case_data = state_case_data.rename(columns={'confirmed':'|  confirmed  |','new_confirmed':'|  New confirmed  |',
                                                      'deaths':'|  deaths  |','new_deaths':'|  New deaths  |',
                                                      'recovered':'|  recovered  |','new_recovered':'|  New recovered  |',
                                                      'active':'|  Active  |','mortality rate':'|  Mortality Rate  |'})                          

state_case_data.sort_values('|  confirmed  |', ascending= False).style\
.background_gradient(cmap='binary',subset=["|  confirmed  |"])\
.background_gradient(cmap='Blues',subset=["|  New confirmed  |"])\
.background_gradient(cmap='binary',subset=["|  deaths  |"])\
.background_gradient(cmap='Reds',subset=["|  New deaths  |"])\
.background_gradient(cmap='binary',subset=["|  recovered  |"])\
.background_gradient(cmap='Greens',subset=["|  New recovered  |"])\
.background_gradient(cmap='Purples',subset=["|  Active  |"])\
.background_gradient(cmap='YlOrBr',subset=["|  Mortality Rate  |"])
| confirmed | | New confirmed | | deaths | | New deaths | | recovered | | New recovered | | Active | | Mortality Rate |
state
Maharashtra 217121 5134 9250 224 118558 3296 89313 4.260297
Tamil Nadu 118594 3616 1636 65 71116 4545 45842 1.379496
Delhi 102831 2008 3165 50 74217 2129 25449 3.077866
Gujarat 37550 778 1977 17 26720 405 8853 5.264980
Uttar Pradesh 29968 1332 827 18 19627 518 9514 2.759610
Telangana 27612 1879 313 7 16287 1506 11012 1.133565
Karnataka 26815 1498 416 15 11098 571 15301 1.551371
West Bengal 23837 850 804 25 15790 555 7243 3.372908
Rajasthan 21404 716 472 11 16575 297 4357 2.205195
Andhra Pradesh 21197 1178 252 13 9745 825 11200 1.188847
Haryana 17999 495 279 3 13645 310 4075 1.550086
Madhya Pradesh 15627 343 622 5 11768 189 3237 3.980291
Bihar 12570 445 104 7 9284 287 3182 0.827367
Assam 12522 362 14 0 8329 447 4179 0.111803
Orissa 10097 571 42 4 6703 217 3352 0.415965
Jammu and Kashmir 8931 256 143 5 5399 81 3389 1.601164
Punjab 6749 258 175 6 4554 60 2020 2.592977
Kerala 5894 272 27 0 3452 111 2415 0.458093
Chhattisgarh 3415 110 14 0 2751 84 650 0.409956
Uttarakhand 3230 69 43 1 2621 35 566 1.331269
Jharkhand 2996 149 22 2 2104 36 870 0.734312
Goa 1903 90 8 1 1156 95 739 0.420389
Tripura 1704 24 1 0 1248 29 455 0.058685
Manipur 1430 40 0 0 771 37 659 0.000000
Himachal Pradesh 1083 6 11 0 790 27 282 1.015697
Ladakh 1041 36 1 0 836 0 204 0.096061
Puducherry 930 128 14 2 434 103 482 1.505376
Nagaland 625 0 0 0 243 0 382 0.000000
Chandigarh 494 5 7 1 401 0 86 1.417004
Dadra and Nagar Haveli and Daman and Diu 405 108 0 0 183 69 222 0.000000
Arunachal Pradesh 276 6 2 0 105 13 169 0.724638
Mizoram 197 0 0 0 133 0 64 0.000000
Andaman and Nicobar Islands 147 6 0 0 75 1 72 0.000000
Sikkim 125 0 0 0 70 5 55 0.000000
Meghalaya 80 0 1 0 43 0 36 1.250000
national_cumulative = pd.DataFrame(case_data.groupby(['date']).sum()).reset_index()
national_cumulative = national_cumulative[national_cumulative['date'] > '2020-03-01']

fig = go.Figure()
fig.add_trace(go.Scatter(x=national_cumulative['date'],y=national_cumulative['confirmed'],mode='lines',name='confirmed',line=dict( width=4)))
fig.add_trace(go.Scatter(x=national_cumulative['date'],y=national_cumulative['deaths'],mode='lines',name='deaths',line=dict( width=4)))
fig.add_trace(go.Scatter(x=national_cumulative['date'],y=national_cumulative['recovered'],mode='lines',name='recovered',line=dict( width=4)))
fig.add_trace(go.Scatter(x=national_cumulative['date'],y=national_cumulative['active'],mode='lines',name='Active',line=dict( width=4)))
fig.update_layout(margin=dict(l=0,r=20,b=0,t=60,pad=0),
                  paper_bgcolor="white",height= 600,
                  legend=dict(x=.01,y=.98),
                  title_text = 'Number of COVID-19 cases nationwide',font_size=15,
                  xaxis_title="Date",
                  yaxis_title="Number of cases",
                  shapes=[dict(type="rect",xref="x",yref="paper",x0="2020-03-25",y0=0,x1="2020-04-14",y1=1,fillcolor="#D89393",opacity=0.5,layer="below",line_width=0,),
                          dict(type="rect",xref="x",yref="paper",x0="2020-04-14",y0=0,x1="2020-05-03",y1=1,fillcolor="#DA7676",opacity=0.5,layer="below",line_width=0,),
                          dict(type="rect",xref="x",yref="paper",x0="2020-05-03",y0=0,x1="2020-05-17",y1=1,fillcolor="#DD4747",opacity=0.5,layer="below",line_width=0,),
                          dict(type="rect",xref="x",yref="paper",x0="2020-05-17",y0=0,x1="2020-05-31",y1=1,fillcolor="#DF1818",opacity=0.5,layer="below",line_width=0,),
                          dict(type="rect",xref="x",yref="paper",x0="2020-05-31",y0=0,x1=max(national_cumulative['date']),y1=1,fillcolor="#A0DE8A",opacity=0.5,layer="below",line_width=0,)],
                  annotations=[dict(x="2020-04-05",y=max(national_cumulative['confirmed'])-10000,xref="x",yref="y",text="First Lockdown",showarrow=False),
                               dict(x="2020-04-23",y=max(national_cumulative['confirmed'])-10000,xref="x",yref="y",text="Second Lockdown",showarrow=False),
                               dict(x="2020-05-10",y=max(national_cumulative['confirmed'])-10000,xref="x",yref="y",text="Third Lockdown",showarrow=False),
                               dict(x="2020-05-24",y=max(national_cumulative['confirmed'])-10000,xref="x",yref="y",text="Fourth Lockdown",showarrow=False),
                               dict(x="2020-05-24",y=max(national_cumulative['confirmed'])-10000,xref="x",yref="y",text="Fourth Lockdown",showarrow=False),
                               ])

fig.layout.hovermode = 'x'
fig.show()
national_daily_cumulative = pd.DataFrame(case_data.groupby(['date']).sum())

fig = go.Figure()
fig.add_trace(go.Scatter(x=national_daily_cumulative.index,y=national_daily_cumulative['new_confirmed'],mode='lines',name='confirmed',line=dict( width=4)))
fig.add_trace(go.Scatter(x=national_daily_cumulative.index,y=national_daily_cumulative['new_deaths'],mode='lines',name='deaths',line=dict( width=4)))
fig.add_trace(go.Scatter(x=national_daily_cumulative.index,y=national_daily_cumulative['new_recovered'],mode='lines',name='recovered',line=dict( width=4)))
fig.update_layout(margin=dict(l=0,r=20,b=0,t=60,pad=0),
                  paper_bgcolor="white",height= 600,
                  legend=dict(x=.01,y=.98),
                  title_text = 'Number of daily COVID-19 cases nationwide',font_size=15,
                  xaxis_title="Date",
                  yaxis_title="Number of new cases",)
fig.layout.hovermode = 'x'
fig.show()

Map Visualization

def CreateMap(data,color,fill_color,location = [22,80],zoom = 5,dot_size = 2):
    _map = folium.Map(location=location, tiles="OpenStreetMap", zoom_start=zoom)
    for name,cases,deaths,lat,lon in data.values:
        folium.CircleMarker([lat,lon],radius=((int(np.log(cases + 10)))*dot_size),color=color,fill_color=fill_color,
                            tooltip = "<h5 style='text-align:center;font-weight: bold'>"+ name +"</h5>"+
                            "<hr style='margin:10px;'>"+
                            "<ul style='color: #444;list-style-type:circle;align-item:left;padding-left:20px;padding-right:20px'>"+
                            "<li>confirmed: "+str(cases)+"</li>"+
                            "<li>deaths:   "+str(deaths)+"</li>"+
                            "</ul>",fill_opacity=0.7).add_to(_map)
    return _map

state_map_plot = case_data[case_data['date'] == max(case_data['date'].values)]
state_map_plot = state_map_plot[['state','confirmed','deaths','lat','long']].reset_index().drop('index',axis = 1)
CreateMap(state_map_plot,'#1C6179','#2C94B8',)
Make this Notebook Trusted to load map: File -> Trust Notebook
district_map_plot = bing_data.groupby(['state','city']).max().reset_index()[['state','city','confirmed','deaths','lat','long']]
# district_map_plot = bing_data[bing_data['date'] == max(bing_data['date'].values)]
district_map_plot['location'] = district_map_plot['city'] + ", " + district_map_plot['state']
district_map_plot = district_map_plot[['location','confirmed','deaths','lat','long']]

CreateMap(district_map_plot,'#1C6179','#2C94B8',dot_size = 1)
Make this Notebook Trusted to load map: File -> Trust Notebook
CreateMap(district_map_plot,'#1C6179','#2C94B8',[28.5,77.3],10,4)
Make this Notebook Trusted to load map: File -> Trust Notebook
HTML("<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/COVID-19_India_Total_Cases_Animated_Map.gif/527px-COVID-19_India_Total_Cases_Animated_Map.gif'>")
# timeline_plot = case_data.groupby(['state','date']).sum().reset_index().sort_values(['date'])
# timeline_plot['date'] = timeline_plot['date'].astype('str')

# fig = px.choropleth(timeline_plot, locations="state",
#                     color=np.log10(timeline_plot["confirmed"]),
#                     hover_name="state",
#                     hover_data=["confirmed",'deaths','recovered'],
#                     color_continuous_scale=px.colors.sequential.thermal_r,
#                     locationmode="IN",
#                     animation_frame='date',color_continuous_midpoint = 3)
# fig.update_layout(margin=dict(l=20,r=0,b=0,t=70,pad=0),
#                   paper_bgcolor="white",
#                   height= 700,
#                   title_text = 'Number of daily COVID-19 cases worldwide',font_size=18)
# fig.show()

Race Map Visualization

case_confirmed_racemap = case_data[['state','date','confirmed']]
case_confirmed_racemap= case_confirmed_racemap.pivot_table(index='state',columns='date',values= 'confirmed')
case_confirmed_racemap.to_csv('country.csv')
# files.download('country.csv')
%%HTML
<div class="flourish-embed flourish-bar-chart-race" data-src="visualisation/2554556" data-url="https://flo.uri.sh/visualisation/2554556/embed"><script src="https://public.flourish.studio/resources/embed.js"></script></div>

Comparison between most effected states

case_country = case_data.groupby(['state','date']).sum().reset_index()
countries = case_country[case_country['confirmed'] > 5000]['state'].unique()

def CreateComparisonPlot(attr,title,x_title,y_title, y_axis_type = None):
    fig = go.Figure()
    for i in countries:
        if y_axis_type == 'log' :
            one_country = case_country[(case_country['state'] == i) & (case_country[attr] > 0)][['date',attr]]
            one_country['date'] = [i for i in range(1,len(one_country)+1)]
        else:
            one_country = case_country[(case_country['state'] == i)][['date',attr]]

        fig.add_trace(go.Scatter(x=one_country['date'],
                                y=one_country[attr],mode='lines',
                                name=i,line=dict( width=4)))
        
    # fig.add_annotation(text="First case of United states",
    #                    x='2020-01-23', y=1, arrowhead=0, showarrow=True)
    fig.update_layout(margin=dict(l=0,r=20,b=0,t=60,pad=0),
                      paper_bgcolor="white",height= 600,
                      legend=dict(x=.01,y=.98,font=dict(size =12)),
                      title_text = title,font_size=15,
                      xaxis_title=x_title,
                      yaxis_title=y_title)
    if y_axis_type == 'log' : 
        fig.update_yaxes(type="log")
        fig.update_layout(legend=dict(x=.85,y=.02,font=dict(size =12)))
        
    fig.layout.hovermode = 'x'
    fig.show()
CreateComparisonPlot('confirmed','Number of confirmed cases for most effected states','Date','Number of cases')
CreateComparisonPlot('deaths','Number of deaths in most effected states','Date','Number of cases')
CreateComparisonPlot('recovered','Number of recovered cases in most effected states','Date','Number of cases')
CreateComparisonPlot('new_confirmed','Number of Daily confirmed cases in most effected states','Date','Number of cases')
CreateComparisonPlot('new_deaths','Number of Daily Death cases in most effected states','Date','Number of cases')
CreateComparisonPlot('confirmed','Number of confirmed cases for most effected countries',
                     'Day','Number of cases (log scale)','log')
CreateComparisonPlot('deaths','Number of confirmed cases for most effected countries',
                     'Day','Number of cases (log scale)','log')
CreateComparisonPlot('recovered','Number of confirmed cases for most effected countries',
                     'Day','Number of cases (log scale)','log')

Trend of each state separate

case_state= case_data.groupby(['state','date']).sum().reset_index()
case_state['date'] = case_state['date'].astype('str')

countries = case_state[case_state['confirmed'] > 200].sort_values(['confirmed'],ascending=False)['state'].unique()

# row = int((len(countries)+1)/3)
rows = len(countries)
columns = 2
f = plt.figure(figsize=(20,rows*5))
gs = f.add_gridspec(rows,columns)
sns.set(style = "whitegrid")

country = 0
for i in range(0,rows):
    data = case_state[case_state['state'] == countries[country]]
    data = data[data['confirmed'] > 0]
    data['day'] = [i for i in range(1,len(data)+1)]

    for j in range(0,columns):
        #if country == len(countries): break
        ax = f.add_subplot(gs[i,j])

        if j == 0:
            sns.scatterplot(data = data,x = 'day',y = 'confirmed',s = 50,color="#4348C4",edgecolor = 'none')
            sns.lineplot(data = data,x = 'day',y = 'confirmed', color = '#4348C4')
            plt.fill_between(data['day'], data['confirmed'], alpha=0.30, color = '#4348C4')

            sns.scatterplot(data = data,x = 'day',y = 'recovered',s= 50,color="#5BAC4D",edgecolor = 'none')
            sns.lineplot(data = data,x = 'day',y = 'recovered',color="#5BAC4D")
            plt.fill_between(data['day'], data['recovered'],alpha=0.30,color="#5BAC4D")

            sns.scatterplot(data = data,x = 'day',y = 'deaths',s= 50,color='#BB3535',edgecolor = 'none')
            sns.lineplot(data = data,x = 'day',y = 'deaths',color='#BB3535')
            plt.fill_between(data['day'], data['deaths'],alpha=0.30,color='#BB3535')

            ax.legend(['confirmed','recovered','deaths'], fontsize=16,loc = 'upper left')
            ax.set_xlabel('Day',fontsize=20)
            ax.set_ylabel('No. of cases',fontsize=20)
            ax.set_title(countries[country], fontdict={'fontsize': 25, 'weight' : 'bold'}, color="black",loc = 'left')
            
            text = str(data['date'].values[0]) + " - " + str(data['date'].values[-1]) + "\n" + "\n" 
            text += 'Total Cases :-' + "\n" 
            text += 'confirmed :' + str(data['confirmed'].values[-1]) + "\n" 
            text += 'deaths      :' + str(data['deaths'].values[-1]) + "\n" 
            text += 'recovered :' + str(data['recovered'].values[-1]) + "\n" + "\n" 

            ax.text(0.02, 0.15, text, fontsize=15, transform=ax.transAxes,bbox=dict(facecolor='#F8F8F8', alpha=.7))

        if j == 1:
            sns.scatterplot(data = data,x = 'day',y = 'new_confirmed',s = 50,color="#4348C4",edgecolor = 'none')
            sns.lineplot(data = data,x = 'day',y = 'new_confirmed', color = '#4348C4')
            plt.fill_between(data['day'], data['new_confirmed'], alpha=0.30, color = '#4348C4')

            sns.scatterplot(data = data,x = 'day',y = 'new_recovered',s= 50,color="#5BAC4D",edgecolor = 'none')
            sns.lineplot(data = data,x = 'day',y = 'new_recovered',color="#5BAC4D")
            plt.fill_between(data['day'], data['new_recovered'],alpha=0.30,color="#5BAC4D")

            sns.scatterplot(data = data,x = 'day',y = 'new_deaths',s= 50,color='#BB3535',edgecolor = 'none')
            sns.lineplot(data = data,x = 'day',y = 'new_deaths',color='#BB3535')
            plt.fill_between(data['day'], data['new_deaths'],alpha=0.30,color='#BB3535')
            
            ax.legend(['Daily confirmed','Daily recovered','Daily deaths'], fontsize=16,loc = 'upper left')
            ax.set_xlabel('Day',fontsize=20)
            ax.set_ylabel('No. of cases',fontsize=20)
            
            text = 'In last 24 hrs :-' + "\n" 
            text += 'confirmed :' + str(data['new_confirmed'].values[-1]) + "\n" 
            text += 'deaths      :' + str(data['new_deaths'].values[-1]) + "\n" 
            text += 'recovered :' + str(data['new_recovered'].values[-1]) 

            ax.text(0.02, 0.3, text, fontsize=15, transform=ax.transAxes,bbox=dict(facecolor='#F8F8F8', alpha=.7))

    country += 1

f.tight_layout()

Testing Analysis

state_tests_data.fillna(0,inplace = True)
state_tests_data['Total Tested'] = state_tests_data['Total Tested'].astype('int')
state_tests_data['Positive'] = state_tests_data['Positive'].astype('int')
state_tests_data['Tests per million'] = state_tests_data['Tests per million'].astype('int')
state_tests_data.loc[(state_tests_data['State'] == 'Dadra and Nagar Haveli and Daman and Diu'),'State'] = 'Dadar and Daman'

con = state_data[['State','Confirmed','Deaths']]
tests = state_tests_data.groupby('State')[['Total Tested','Tests per million']].max().reset_index()
# tests = tests.drop('index',axis = 1)
tests = tests.merge(con,how = 'left', on = 'State')
tests.fillna(0,inplace = True)
tests['mortality rate'] =  (tests['Deaths']/tests['Confirmed'])*100
tests['spread rate'] = (tests['Confirmed']/tests['Total Tested'])*100
tests['Confirmed'] = tests['Confirmed'].astype('int')
tests['Deaths'] = tests['Deaths'].astype('int')
tests.fillna(0,inplace = True)
tests_named = tests.rename(columns={'Total Tested':'|  Total Tested  |','Confirmed':'|  Confirmed  |',
                                    'Tests per million':'|  Tests Per Million  |',
                                    'Deaths':'|  Deaths  |','mortality rate':'|  Mortality Rate  |',
                                    'spread rate':'|  Spread Rate  |'})
tests_named = tests_named.set_index('State')
tests_named.sort_values('|  Total Tested  |', ascending= False).style\
.background_gradient(cmap='Blues',subset=["|  Total Tested  |"])\
.background_gradient(cmap='Greens',subset=["|  Tests Per Million  |"])\
.background_gradient(cmap='binary',subset=["|  Confirmed  |"])\
.background_gradient(cmap='Reds',subset=["|  Deaths  |"])\
.background_gradient(cmap='YlOrBr',subset=["|  Mortality Rate  |"])\
.background_gradient(cmap='Purples',subset=["|  Spread Rate  |"])
| Total Tested | | Tests Per Million | | Confirmed | | Deaths | | Mortality Rate | | Spread Rate |
State
Tamil Nadu 1413435 18185 118594 1636 1.379496 8.390481
Maharashtra 1164860 9322 217121 9250 4.260297 18.639236
Andhra Pradesh 1050090 19798 21197 252 1.188847 2.018589
Rajasthan 940758 11915 21577 478 2.215322 2.293576
Uttar Pradesh 922049 3956 29968 827 2.759610 3.250153
Karnataka 740047 10978 26815 417 1.555100 3.623419
Delhi 679831 33178 102831 3165 3.077866 15.125965
West Bengal 562137 5696 23837 804 3.372908 4.240425
Assam 485156 13741 13337 21 0.157457 2.749013
Madhya Pradesh 427143 5076 15627 622 3.980291 3.658494
Gujarat 425830 6160 37636 1978 5.255606 8.838269
Jammu and Kashmir 413358 30767 8931 143 1.601164 2.160597
Punjab 352363 11471 6749 175 2.592977 1.915354
Haryana 323491 11016 17999 279 1.550086 5.563988
Odisha 302780 6806 10624 61 0.574172 3.508818
Kerala 285968 7853 5895 28 0.474979 2.061419
Bihar 269277 2253 12525 98 0.782435 4.651344
Chhattisgarh 189038 6454 3415 14 0.409956 1.806515
Jharkhand 161564 4256 3018 22 0.728960 1.867990
Telangana 128438 3284 27612 313 1.133565 21.498310
Himachal Pradesh 91175 12234 1083 10 0.923361 1.187826
Uttarakhand 81447 7145 3230 43 1.331269 3.965769
Goa 79864 50021 1903 8 0.420389 2.382801
Tripura 74230 18301 1716 1 0.058275 2.311734
Manipur 57769 18235 1430 0 0.000000 2.475376
Dadar and Daman 34444 35917 0 0 0.000000 0.000000
Arunachal Pradesh 28072 18381 276 2 0.724638 0.983186
Puducherry 22055 14217 1151 14 1.216334 5.218771
Meghalaya 21237 6587 98 2 2.040816 0.461459
Nagaland 21209 9527 656 0 0.000000 3.093027
Andaman and Nicobar Islands 17095 43060 149 0 0.000000 0.871600
Mizoram 15058 12589 198 0 0.000000 1.314916
Ladakh 14833 50625 1041 1 0.096061 7.018135
Sikkim 11581 17179 127 0 0.000000 1.096624
Chandigarh 8669 7233 492 7 1.422764 5.675395
tests = tests.sort_values('Total Tested')

fig = go.Figure()
fig.add_trace(go.Bar(y=tests['State'],x=tests['Total Tested'],
                     orientation = 'h',text = tests['Total Tested'],textposition = 'outside',
                     name='Confirmed',marker= { 'color': 'rgb(47,138,0)'}))
fig.update_layout(margin=dict(l=0,r=20,b=0,t=60,pad=0),
                  paper_bgcolor="white",height= 800,
                  legend=dict(x=.01,y=.98),
                  title_text = 'Comparing number of tests done by states',font_size=15,
                  yaxis_title="State",
                  xaxis_title="Number of tests (in million)",)
fig.layout.hovermode = 'y'
fig.show()
fig = go.Figure()
fig.add_trace(go.Bar(y=tests['State'],x=tests['Tests per million'],
                     orientation='h',text = tests['Tests per million'],textposition = 'outside',
                     name='Confirmed',marker= { 'color': 'rgb(105,67,144)'}))
fig.update_layout(margin=dict(l=0,r=20,b=0,t=60,pad=0),
                  paper_bgcolor="white",height= 800,
                  legend=dict(x=.01,y=.98),
                  title_text = 'Number of tests per million of population in states',font_size=15,
                  yaxis_title="State",
                  xaxis_title="Number of tests per million",)
fig.layout.hovermode = 'y'
fig.show()
fig = go.Figure()
fig.add_trace(go.Bar(y=tests['State'],x=tests['Tests per million'],orientation = 'h',
                     name = 'Tests per million',marker= { 'color': 'rgb(105,67,144)'}))
fig.add_trace(go.Bar(y=tests['State'],x=tests['Total Tested'],orientation = 'h',
                     text = tests['Tests per million'],textposition = 'outside',
                      name = 'Total Tests',marker= { 'color': 'rgb(47,138,0)'}))
fig.update_layout(margin=dict(l=0,r=20,b=0,t=60,pad=0),
                  paper_bgcolor="white",height= 800,
                  legend=dict(x=.825,y=.1),
                  title_text = 'No. of tests and No. of test per million comparison',font_size=15,
                  yaxis_title="State",
                  xaxis_title="Number of tests",
                  barmode='stack')
fig.layout.hovermode = 'y'
fig.show()

Mortality and Spread Rates Comparison

national_case_data = case_data[case_data['date'] > '2020-03-25'].groupby('date').sum().reset_index()
national_case_data['mortality Rate'] = (national_case_data['deaths']/national_case_data['confirmed'])*100

fig = go.Figure()
fig.add_trace(go.Scatter(x=national_case_data['date'],y=national_case_data['mortality Rate'],mode='lines+markers',
                         fill='tozeroy',name = 'Total Tests',marker= { 'color': '#B87625','size' : 10},line=dict( width=4)))
fig.update_layout(margin=dict(l=0,r=20,b=0,t=60,pad=0),
                  paper_bgcolor="white",height= 600,
                  legend=dict(x=.825,y=.98),
                  title_text = 'National Mortality Rate',font_size=15,
                  xaxis_title="Date",
                  yaxis_title="Rate")
fig.layout.hovermode = 'x'
fig.show()
tests_mortality = tests[tests['mortality rate']>0].sort_values('mortality rate',ascending = True)

fig = go.Figure()
fig.add_trace(go.Bar(y=tests_mortality['State'],x=tests_mortality['mortality rate'],
                     orientation = 'h',text = tests['mortality rate'],textposition = 'outside',
                     name = 'Total Tests',marker= { 'color': '#D38B2C'}))
fig.update_layout(margin=dict(l=0,r=20,b=0,t=60,pad=0),
                  paper_bgcolor="white",height= 600,
                  legend=dict(x=.825,y=.98),
                  title_text = 'Mortality Rate (No. of confirmed / No. of deaths)',font_size=15,
                  xaxis_title="Country",
                  yaxis_title="Rate")
fig.layout.hovermode = 'y'
fig.show()
tests_spread = tests.sort_values('spread rate',ascending = True).head(40)

fig = go.Figure()
fig.add_trace(go.Bar(y=tests_spread['State'],x=tests_spread['spread rate'],orientation = 'h',
                     text = tests['spread rate'],textposition = 'outside',
                     name = 'Total Tests',marker= { 'color': '#B325B8'}))
fig.update_layout(margin=dict(l=0,r=20,b=0,t=60,pad=0),
                  paper_bgcolor="white",height= 800,
                  legend=dict(x=.825,y=.98),
                  title_text = 'Spreat Rate (No. of Tests / No. of confirmed cases)',font_size=15,
                  xaxis_title="Country",
                  yaxis_title="Rate")
fig.layout.hovermode = 'x'
fig.show()

Age Analysis

def GetAgeData(data,feature_name):
    for i in data.index:
        age = data.loc[data.index == i,feature_name]
        try:
            age = int(age)
        except:
            continue
        if age <= 10: data.loc[data.index == i,feature_name] = '1-10'
        if 11 <= age <= 20: data.loc[data.index == i,feature_name] = '11-20'
        if 21 <= age <= 30: data.loc[data.index == i,feature_name] = '21-30'
        if 31 <= age <= 40: data.loc[data.index == i,feature_name] = '31-40'
        if 41 <= age <= 50: data.loc[data.index == i,feature_name] = '41-50'
        if 51 <= age <= 60: data.loc[data.index == i,feature_name] = '51-60'
        if 61 <= age <= 70: data.loc[data.index == i,feature_name] = '61-70'
        if age > 70: data.loc[data.index == i,feature_name] = '70+'

    return data.groupby(feature_name).size().reset_index(name = 'freq')
#  patients_data.loc[(patients_data['Age Bracket'] == '1.5'),'Age Bracket'] = np.nan
#  patients_data.loc[(patients_data['Age Bracket'] == '0.4'),'Age Bracket'] = np.nan
#  patients_data.loc[(patients_data['Age Bracket'] == '0.3'),'Age Bracket'] = np.nan
patients_data.loc[(patients_data['Age Bracket'] == '28-35'),'Age Bracket'] = 31
patients_data.loc[(patients_data['Age Bracket'] == '6 Months'),'Age Bracket'] = 0.5
patients_data['Age Bracket'] = patients_data['Age Bracket'].astype('float')
age_data = GetAgeData(pd.DataFrame(patients_data['Age Bracket'].values,columns= ['Age Bracket']),'Age Bracket')

fig = go.Figure().add_trace(go.Pie(values=age_data['freq'],labels= age_data['Age Bracket'],hole = .5,text=age_data['Age Bracket']))
fig.update_layout(margin=dict(l=0,r=20,b=20,t=60,pad=0),
                  paper_bgcolor="white",height= 600,
                  legend=dict(x=.825,y=.98),
                  title_text = 'Percentage of cases recorded by age',font_size=20,
                  xaxis_title="Country",
                  yaxis_title="Rate")
fig.layout.hovermode = 'x'
fig.show()
age_data_deseased = GetAgeData(pd.DataFrame(patients_data[patients_data['Current Status'] == 'Deceased']['Age Bracket'].values,columns= ['Age Bracket']),'Age Bracket')


fig = go.Figure().add_trace(go.Pie(values=age_data_deseased['freq'],labels= age_data_deseased['Age Bracket'],
                                   hole = .5,text=age_data_deseased['Age Bracket']))
fig.update_layout(margin=dict(l=0,r=20,b=20,t=60,pad=0),
                  paper_bgcolor="white",height= 600,
                  legend=dict(x=.825,y=.98),
                  title_text = 'Percentage of cases resulted in death by age',font_size=20,
                  xaxis_title="Country",
                  yaxis_title="Rate")
fig.layout.hovermode = 'x'
fig.show()

Gender Analysis

temp = pd.DataFrame(patients_data['Gender'].values,columns= ['Gender'])
temp = temp.fillna('NA')
temp.loc[(temp['Gender'] == 'Non-Binary'),'Gender'] = np.nan
gender_data = temp.groupby('Gender').size().reset_index(name = 'size')

fig = go.Figure().add_trace(go.Pie(values = gender_data['size'],labels = gender_data['Gender'],
                                   hole = .5,text=gender_data['Gender']))
fig.update_layout(margin=dict(l=0,r=20,b=20,t=60,pad=0),
                  paper_bgcolor="white",height= 600,
                  legend=dict(x=.825,y=.98),
                  title_text = 'Percentage of cases recorded by gender',font_size=20,
                  xaxis_title="Country",
                  yaxis_title="Rate")
fig.show()
temp = pd.DataFrame(patients_data[patients_data['Current Status'] == 'Deceased']['Gender'].values,columns= ['Gender'])
temp = temp.fillna('NA')
temp.loc[(temp['Gender'] == 'Non-Binary'),'Gender'] = np.nan
gender_data_deseased = temp.groupby('Gender').size().reset_index(name = 'size')

fig = go.Figure().add_trace(go.Pie(values=gender_data_deseased['size'],labels= gender_data_deseased['Gender'],
                                   hole = .5,text=gender_data_deseased['Gender']))
fig.update_layout(margin=dict(l=0,r=20,b=20,t=60,pad=0),
                  paper_bgcolor="white",height= 600,
                  legend=dict(x=.825,y=.98),
                  title_text = 'Percentage of cases resulted in death by gender',font_size=20,
                  xaxis_title="Country",
                  yaxis_title="Rate")
fig.show()

India Suppling HCQ, Paracetamol to 108 Countries

HTML(''' <iframe title="[Covid-19: India is supplying HCQ, Paracetamol to 108 countries ]" aria-label="Map" id="datawrapper-chart-kqJFM" src="https://datawrapper.dwcdn.net/kqJFM/1/" scrolling="no" frameborder="0" style="width: 0; min-width: 100% !important; border: none;" height="537"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(a){if(void 0!==a.data["datawrapper-height"])for(var e in a.data["datawrapper-height"]){var t=document.getElementById("datawrapper-chart-"+e)||document.querySelector("iframe[src*='"+e+"']");t&&(t.style.height=a.data["datawrapper-height"][e]+"px")}}))}();
</script> ''')

Containment Zones

zones[zones['Zone'] == 'Red Zone'][['District','State','Zone']].style.set_properties(**{'background-color': 'white',
                                                                                   'color': 'black',
                                                                                   'border-color': 'white'})
District State Zone
0 South Andamans Andaman And Nicobar Islands Red Zone
3 Kurnool Andhra Pradesh Red Zone
4 Guntur Andhra Pradesh Red Zone
5 Krishna Andhra Pradesh Red Zone
6 Chittoor Andhra Pradesh Red Zone
7 Spsr Nellore Andhra Pradesh Red Zone
74 Munger Bihar Red Zone
75 Patna Bihar Red Zone
76 Rohtas Bihar Red Zone
77 Buxar Bihar Red Zone
78 Gaya Bihar Red Zone
112 Chandigarh Chandigarh Red Zone
113 Raipur Chhattisgarh Red Zone
143 South East Delhi Red Zone
144 Central Delhi Red Zone
145 North Delhi Red Zone
146 South Delhi Red Zone
147 North East Delhi Red Zone
148 West Delhi Red Zone
149 Shahdara Delhi Red Zone
150 East Delhi Red Zone
151 New Delhi Delhi Red Zone
152 North West Delhi Red Zone
153 South West Delhi Red Zone
156 Ahmadabad Gujarat Red Zone
157 Surat Gujarat Red Zone
158 Vadodara Gujarat Red Zone
159 Anand Gujarat Red Zone
160 Banas Kantha Gujarat Red Zone
161 Panch Mahals Gujarat Red Zone
162 Bhavnagar Gujarat Red Zone
163 Gandhinagar Gujarat Red Zone
164 ArvaIii Gujarat Red Zone
189 Sonipat Haryana Red Zone
190 Faridabad Haryana Red Zone
223 Bandipora Jammu And Kashmir Red Zone
224 Shopian Jammu And Kashmir Red Zone
225 Anantnag Jammu And Kashmir Red Zone
226 Srinagar Jammu And Kashmir Red Zone
243 Ranchi Jharkhand Red Zone
267 Bengaluru Urban Karnataka Red Zone
268 Mysuru Karnataka Red Zone
269 Bengaluru Rural Karnataka Red Zone
297 Kannur Kerala Red Zone
298 Kottayam Kerala Red Zone
314 Indore Madhya Pradesh Red Zone
315 Bhopal Madhya Pradesh Red Zone
316 Ujjain Madhya Pradesh Red Zone
317 Jabalpur Madhya Pradesh Red Zone
318 Dhar Madhya Pradesh Red Zone
319 Barwani Madhya Pradesh Red Zone
320 East Nimar Madhya Pradesh Red Zone
321 Dewas Madhya Pradesh Red Zone
322 Gwalior Madhya Pradesh Red Zone
366 Mumbai Maharashtra Red Zone
367 Pune Maharashtra Red Zone
368 Thane Maharashtra Red Zone
369 Nashik Maharashtra Red Zone
370 Palghar Maharashtra Red Zone
371 Nagpur Maharashtra Red Zone
372 Solapur Maharashtra Red Zone
373 Yavatmal Maharashtra Red Zone
374 Aurangabad Maharashtra Red Zone
375 Satara Maharashtra Red Zone
376 Dhule Maharashtra Red Zone
377 Ako la Maharashtra Red Zone
378 Jalgaon Maharashtra Red Zone
379 Mumbai Suburban Maharashtra Red Zone
451 Jajapur Orrisa Red Zone
452 Bhadrak Orrisa Red Zone
453 Baleshwar Orrisa Red Zone
485 Jalandhar Punjab Red Zone
486 Patiala Punjab Red Zone
487 Ludhiana Punjab Red Zone
507 Jaipur Rajasthan Red Zone
508 Jodhpur Rajasthan Red Zone
509 Kota Rajasthan Red Zone
510 Ajmer Rajasthan Red Zone
511 Bharatpur Rajasthan Red Zone
512 Nagaur Rajasthan Red Zone
513 Banswara Rajasthan Red Zone
514 Jhalawar Rajasthan Red Zone
544 Chennai Tamil Nadu Red Zone
545 Madurai Tamil Nadu Red Zone
546 Namakkal Tamil Nadu Red Zone
547 Thanjavur Tamil Nadu Red Zone
548 Chengalpattu Tamil Nadu Red Zone
549 Thiruvallur Tamil Nadu Red Zone
550 Tiruppur Tamil Nadu Red Zone
551 Rani pet Tamil Nadu Red Zone
552 Virudhunagar Tamil Nadu Red Zone
553 Thiruvarur Tamil Nadu Red Zone
554 Ve II ore Tamil Nadu Red Zone
555 Kanchipuram Tamil Nadu Red Zone
581 Hyderabad Telangana Red Zone
582 Surya pet Telangana Red Zone
583 Ranga Reddy Telangana Red Zone
584 MedchalMalkajgiri Telangana Red Zone
585 Vikarabad Telangana Red Zone
586 Warangal Urban Telangana Red Zone
622 Agra Uttar Pradesh Red Zone
623 Lucknow Uttar Pradesh Red Zone
624 Saharanpur Uttar Pradesh Red Zone
625 Kanpur Nagar Uttar Pradesh Red Zone
626 Moradabad Uttar Pradesh Red Zone
627 Firozabad Uttar Pradesh Red Zone
628 Gautam Buddha Nagar Uttar Pradesh Red Zone
629 Bulandshahr Uttar Pradesh Red Zone
630 Meerut Uttar Pradesh Red Zone
631 Rae Bareli Uttar Pradesh Red Zone
632 Varanasi Uttar Pradesh Red Zone
633 Bijnor Uttar Pradesh Red Zone
634 Amroha Uttar Pradesh Red Zone
635 Sant Kabeer Nagar Uttar Pradesh Red Zone
636 Aligarh Uttar Pradesh Red Zone
637 Muzaffarnagar Uttar Pradesh Red Zone
638 Rampur Uttar Pradesh Red Zone
639 Mathura Uttar Pradesh Red Zone
640 Bareilly Uttar Pradesh Red Zone
697 Haridwar Uttarakhand Red Zone
710 Kolkata West Bengal Red Zone
711 Howrah West Bengal Red Zone
712 24 Paraganas North West Bengal Red Zone
713 24 Paraganas South West Bengal Red Zone
714 Medinipur West West Bengal Red Zone
715 Medinipur East West Bengal Red Zone
716 Darjeeling West Bengal Red Zone
717 Jalpaiguri West Bengal Red Zone
718 Kalimpong West Bengal Red Zone
719 Maldah West Bengal Red Zone
zones[zones['Zone'] == 'Orange Zone'][['District','State','Zone']].style.set_properties(**{'background-color': 'white',
                                                                                   'color': 'black',
                                                                                   'border-color': 'white'})
District State Zone
8 West Godavari Andhra Pradesh Orange Zone
9 YSR Andhra Pradesh Orange Zone
10 Anantapur Andhra Pradesh Orange Zone
11 Prakasam Andhra Pradesh Orange Zone
12 East Godavari Andhra Pradesh Orange Zone
13 Srikakulam Andhra Pradesh Orange Zone
14 Visakhapatanam Andhra Pradesh Orange Zone
41 Dhubri Assam Orange Zone
42 Marigaon Assam Orange Zone
43 Goalpara Assam Orange Zone
79 Nalanda Bihar Orange Zone
80 Kaimur (Bhabua) Bihar Orange Zone
81 Siwan Bihar Orange Zone
82 Gopalganj Bihar Orange Zone
83 Bhojpur Bihar Orange Zone
84 Begusarai Bihar Orange Zone
85 Aurangabad Bihar Orange Zone
86 Madhubani Bihar Orange Zone
87 Purbi Champaran Bihar Orange Zone
88 Bhagalpur Bihar Orange Zone
89 Arwal Bihar Orange Zone
90 Saran Bihar Orange Zone
91 Nawada Bihar Orange Zone
92 Lakhisarai Bihar Orange Zone
93 Banka Bihar Orange Zone
94 Vaishali Bihar Orange Zone
95 Darbhanga Bihar Orange Zone
96 Jehanabad Bihar Orange Zone
97 Madhepura Bihar Orange Zone
98 Purnia Bihar Orange Zone
114 Korba Chhattisgarh Orange Zone
165 Rajkot Gujarat Orange Zone
166 Bharuch Gujarat Orange Zone
167 Botad Gujarat Orange Zone
168 Narmada Gujarat Orange Zone
169 Chhotaudepur Gujarat Orange Zone
170 Mahisagar Gujarat Orange Zone
171 Mahesana Gujarat Orange Zone
172 Patan Gujarat Orange Zone
173 Kheda Gujarat Orange Zone
174 Valsad Gujarat Orange Zone
175 Dohad Gujarat Orange Zone
176 Kachchh Gujarat Orange Zone
177 Navsari Gujarat Orange Zone
178 GirSomnath Gujarat Orange Zone
179 Dang Gujarat Orange Zone
180 SabarKantha Gujarat Orange Zone
181 Tapi Gujarat Orange Zone
182 Jamnagar Gujarat Orange Zone
183 Surendranagar Gujarat Orange Zone
191 Gurugram Haryana Orange Zone
192 Nuh Haryana Orange Zone
193 Panipat Haryana Orange Zone
194 Panchkula Haryana Orange Zone
195 Palwal Haryana Orange Zone
196 Rohtak Haryana Orange Zone
197 Hisar Haryana Orange Zone
198 Ambala Haryana Orange Zone
199 Jhajjar Haryana Orange Zone
200 Bhiwani Haryana Orange Zone
201 Kaithal Haryana Orange Zone
202 Kurukshetra Haryana Orange Zone
203 Karna I Haryana Orange Zone
204 Jind Haryana Orange Zone
205 Sirsa Haryana Orange Zone
206 Yamunanagar Haryana Orange Zone
207 Fatehabad Haryana Orange Zone
208 Charki Dadri Haryana Orange Zone
211 Una Himachal Pradesh Orange Zone
212 Chamba Himachal Pradesh Orange Zone
213 Hamirpur Himachal Pradesh Orange Zone
214 Kangra Himachal Pradesh Orange Zone
215 Sirmaur Himachal Pradesh Orange Zone
216 Solan Himachal Pradesh Orange Zone
227 Baramulla Jammu And Kashmir Orange Zone
228 Kupwara Jammu And Kashmir Orange Zone
229 Ganderbal Jammu And Kashmir Orange Zone
230 Jammu Jammu And Kashmir Orange Zone
231 Udhampur Jammu And Kashmir Orange Zone
232 Kulgam Jammu And Kashmir Orange Zone
233 Budgam Jammu And Kashmir Orange Zone
234 Samba Jammu And Kashmir Orange Zone
235 Kathua Jammu And Kashmir Orange Zone
236 Rajouri Jammu And Kashmir Orange Zone
237 Ramban Jammu And Kashmir Orange Zone
238 Reasi Jammu And Kashmir Orange Zone
244 Bokaro Jharkhand Orange Zone
245 Garhwa Jharkhand Orange Zone
246 Dhanbad Jharkhand Orange Zone
247 Deoghar Jharkhand Orange Zone
248 Hazaribagh Jharkhand Orange Zone
249 Simdega Jharkhand Orange Zone
250 Giridih Jharkhand Orange Zone
251 Koderma Jharkhand Orange Zone
252 Jamtara Jharkhand Orange Zone
270 Belagavi Karnataka Orange Zone
271 Vijayapura Karnataka Orange Zone
272 Kalaburagi Karnataka Orange Zone
273 Bagalkote Karnataka Orange Zone
274 Mandya Karnataka Orange Zone
275 Ballari Karnataka Orange Zone
276 Dharwad Karnataka Orange Zone
277 Dakshina Kannada Karnataka Orange Zone
278 Bidar Karnataka Orange Zone
279 Chikkaballapura Karnataka Orange Zone
280 Gadag Karnataka Orange Zone
281 Uttara Kannada Karnataka Orange Zone
282 Tumakuru Karnataka Orange Zone
299 Kasaragod Kerala Orange Zone
300 ldukki Kerala Orange Zone
301 Kozhikode Kerala Orange Zone
302 Kollam Kerala Orange Zone
303 Palakkad Kerala Orange Zone
304 Pathanamthitta Kerala Orange Zone
305 Malappuram Kerala Orange Zone
306 Thiruvananthapuram Kerala Orange Zone
307 Alappuzha Kerala Orange Zone
308 Thrissur Kerala Orange Zone
311 Lehladakh Ladakh Orange Zone
312 Kargil Ladakh Orange Zone
323 Khargone Madhya Pradesh Orange Zone
324 Raisen Madhya Pradesh Orange Zone
325 Hoshangabad Madhya Pradesh Orange Zone
326 Ratlam Madhya Pradesh Orange Zone
327 Agar Malwa Madhya Pradesh Orange Zone
328 Mandsaur Madhya Pradesh Orange Zone
329 Sagar Madhya Pradesh Orange Zone
330 Shajapur Madhya Pradesh Orange Zone
331 Chhindwara Madhya Pradesh Orange Zone
332 Alirajpur Madhya Pradesh Orange Zone
333 Tikamgarh Madhya Pradesh Orange Zone
334 Shahdol Madhya Pradesh Orange Zone
335 Sheopur Madhya Pradesh Orange Zone
336 Dindori Madhya Pradesh Orange Zone
337 Burhanpur Madhya Pradesh Orange Zone
338 Harda Madhya Pradesh Orange Zone
339 Betul Madhya Pradesh Orange Zone
340 Vidisha Madhya Pradesh Orange Zone
341 Morena Madhya Pradesh Orange Zone
380 Raigad Maharashtra Orange Zone
381 Ahmednagar Maharashtra Orange Zone
382 Amravati Maharashtra Orange Zone
383 Buldhana Maharashtra Orange Zone
384 Nandurbar Maharashtra Orange Zone
385 Kolhapur Maharashtra Orange Zone
386 Hingoli Maharashtra Orange Zone
387 Ratnagiri Maharashtra Orange Zone
388 Jalna Maharashtra Orange Zone
389 Nanded Maharashtra Orange Zone
390 Chandrapur Maharashtra Orange Zone
391 Parbhani Maharashtra Orange Zone
392 Sangli Maharashtra Orange Zone
393 Latur Maharashtra Orange Zone
394 Bhandara Maharashtra Orange Zone
395 Beed Maharashtra Orange Zone
418 East Khasi Hills Meghalaya Orange Zone
454 Khordha Orrisa Orange Zone
455 Sundargarh Orrisa Orange Zone
456 Kendrapara Orrisa Orange Zone
457 Kora put Orrisa Orange Zone
458 Dhenkanal Orrisa Orange Zone
459 Kalahandi Orrisa Orange Zone
481 Pondicherry Puducherry Orange Zone
488 SAS Nagar Punjab Orange Zone
489 Pathankot Punjab Orange Zone
490 Mansa Punjab Orange Zone
491 Tarn Taran Punjab Orange Zone
492 Amritsar Punjab Orange Zone
493 Kapurthala Punjab Orange Zone
494 Hoshiarpur Punjab Orange Zone
495 Faridkot Punjab Orange Zone
496 Sangrur Punjab Orange Zone
497 Shahid Bhagat Singh Nagar (Nawanshahr) Punjab Orange Zone
498 Firozepur Punjab Orange Zone
499 Sri Muktsar Sahib Punjab Orange Zone
500 Moga Punjab Orange Zone
501 Gurdaspur Punjab Orange Zone
502 Barna la Punjab Orange Zone
515 Tonk Rajasthan Orange Zone
516 Jaisalmer Rajasthan Orange Zone
517 Dausa Rajasthan Orange Zone
518 Jhunjhunu Rajasthan Orange Zone
519 Hanumangarh Rajasthan Orange Zone
520 Bhilwara Rajasthan Orange Zone
521 Sawai Madhaopur Rajasthan Orange Zone
522 Chittorgarh Rajasthan Orange Zone
523 Dungarpur Rajasthan Orange Zone
524 Udaipur Rajasthan Orange Zone
525 Dholpur Rajasthan Orange Zone
526 Sikar Rajasthan Orange Zone
527 Alwar Rajasthan Orange Zone
528 Bikaner Rajasthan Orange Zone
529 Churu Rajasthan Orange Zone
530 Pali Rajasthan Orange Zone
531 Barmer Rajasthan Orange Zone
532 Karauli Rajasthan Orange Zone
533 Rajsamand Rajasthan Orange Zone
556 Theni Tamil Nadu Orange Zone
557 Tenkasi Tamil Nadu Orange Zone
558 Nagapattinam Tamil Nadu Orange Zone
559 Dindigul Tamil Nadu Orange Zone
560 Villupuram Tamil Nadu Orange Zone
561 Coimbatore Tamil Nadu Orange Zone
562 Cuddalore Tamil Nadu Orange Zone
563 Salem Tamil Nadu Orange Zone
564 Karur Tamil Nadu Orange Zone
565 Tuticorin Tamil Nadu Orange Zone
566 Tiruchirappalli Tamil Nadu Orange Zone
567 Tirupathur Tamil Nadu Orange Zone
568 Kanniyakumari Tamil Nadu Orange Zone
569 Tiruvannamalai Tamil Nadu Orange Zone
570 Ramanathapuram Tamil Nadu Orange Zone
571 Tirunelveli Tamil Nadu Orange Zone
572 The Nilgiris Tamil Nadu Orange Zone
573 Sivaganga Tamil Nadu Orange Zone
574 Perambalur Tamil Nadu Orange Zone
575 Kallakurichi Tamil Nadu Orange Zone
576 Ariyalur Tamil Nadu Orange Zone
577 Erode Tamil Nadu Orange Zone
578 Pudukkottai Tamil Nadu Orange Zone
579 Dharmapuri Tamil Nadu Orange Zone
587 Nizamabad Telangana Orange Zone
588 JogulambaGadwal Telangana Orange Zone
589 Nirmal Telangana Orange Zone
590 Nalgonda Telangana Orange Zone
591 Adilabad Telangana Orange Zone
592 Sangareddy Telangana Orange Zone
593 Kama reddy Telangana Orange Zone
594 KumuramBheemAsifabad Telangana Orange Zone
595 Karimnagar Telangana Orange Zone
596 Khammam Telangana Orange Zone
597 Mahabubnagar Telangana Orange Zone
598 Jagitial Telangana Orange Zone
599 RajannaSircilla Telangana Orange Zone
600 JayashankarBhupalapa lly Telangana Orange Zone
601 Medak Telangana Orange Zone
602 Jangoan Telangana Orange Zone
603 Narayanpet Telangana Orange Zone
604 Manche rial Telangana Orange Zone
614 North Tripura Tripura Orange Zone
615 Gomati Tripura Orange Zone
641 Ghaziabad Uttar Pradesh Orange Zone
642 Hapur Uttar Pradesh Orange Zone
643 Baghpat Uttar Pradesh Orange Zone
644 Basti Uttar Pradesh Orange Zone
645 Budaun Uttar Pradesh Orange Zone
646 Sambhal Uttar Pradesh Orange Zone
647 Auraiya Uttar Pradesh Orange Zone
648 Sham Ii Uttar Pradesh Orange Zone
649 Sitapur Uttar Pradesh Orange Zone
650 Bahraich Uttar Pradesh Orange Zone
651 Kannauj Uttar Pradesh Orange Zone
652 Azamgarh Uttar Pradesh Orange Zone
653 Mainpuri Uttar Pradesh Orange Zone
654 Shravasti Uttar Pradesh Orange Zone
655 Banda Uttar Pradesh Orange Zone
656 Jaunpur Uttar Pradesh Orange Zone
657 Etah Uttar Pradesh Orange Zone
658 Kasganj Uttar Pradesh Orange Zone
659 Sultanpur Uttar Pradesh Orange Zone
660 Prayagraj Uttar Pradesh Orange Zone
661 Jalaun Uttar Pradesh Orange Zone
662 Mirzapur Uttar Pradesh Orange Zone
663 Etawah Uttar Pradesh Orange Zone
664 Pratapgarh Uttar Pradesh Orange Zone
665 Ghazipur Uttar Pradesh Orange Zone
666 Gonda Uttar Pradesh Orange Zone
667 Mau Uttar Pradesh Orange Zone
668 Bhadohi Uttar Pradesh Orange Zone
669 Unnao Uttar Pradesh Orange Zone
670 Pilibhit Uttar Pradesh Orange Zone
671 Balrampur Uttar Pradesh Orange Zone
672 Ayodhya Uttar Pradesh Orange Zone
673 Gorakhpur Uttar Pradesh Orange Zone
674 Jhansi Uttar Pradesh Orange Zone
675 Hardoi Uttar Pradesh Orange Zone
676 Kaushambi Uttar Pradesh Orange Zone
698 Dehradun Uttarakhand Orange Zone
699 Nainital Uttarakhand Orange Zone
720 Hooghly West Bengal Orange Zone
721 Paschim Bardhaman West Bengal Orange Zone
722 Nadia West Bengal Orange Zone
723 Purba Bardhaman West Bengal Orange Zone
724 Murshidabad West Bengal Orange Zone
zones[zones['Zone'] == 'Green Zone'][['District','State','Zone']].style.set_properties(**{'background-color': 'white',
                                                                                   'color': 'black',
                                                                                   'border-color': 'white'})
District State Zone
1 Nicobars Andaman And Nicobar Islands Green Zone
2 North And Middle Andaman Andaman And Nicobar Islands Green Zone
15 Vizianagaram Andhra Pradesh Green Zone
16 Lohit Arunachal Pradesh Green Zone
17 Changlang Arunachal Pradesh Green Zone
18 Dibang Valley Arunachal Pradesh Green Zone
19 East Kameng Arunachal Pradesh Green Zone
20 East Siang Arunachal Pradesh Green Zone
21 KurungKumey Arunachal Pradesh Green Zone
22 Lower Dibang Valley Arunachal Pradesh Green Zone
23 Lower Subansiri Arunachal Pradesh Green Zone
24 Papum Pare Arunachal Pradesh Green Zone
25 Tawang Arunachal Pradesh Green Zone
26 Tirap Arunachal Pradesh Green Zone
27 Upper Siang Arunachal Pradesh Green Zone
28 Upper Subansiri Arunachal Pradesh Green Zone
29 West Kameng Arunachal Pradesh Green Zone
30 West Siang Arunachal Pradesh Green Zone
31 Anjaw Arunachal Pradesh Green Zone
32 Longding Arunachal Pradesh Green Zone
33 KraDaadi Arunachal Pradesh Green Zone
34 Namsai Arunachal Pradesh Green Zone
35 Siang Arunachal Pradesh Green Zone
36 Kamle Arunachal Pradesh Green Zone
37 Lower Siang Arunachal Pradesh Green Zone
38 PakkeKessang Arunachal Pradesh Green Zone
39 Leparada Arunachal Pradesh Green Zone
40 Shi Yomi Arunachal Pradesh Green Zone
44 Golaghat Assam Green Zone
45 Karimganj Assam Green Zone
46 Nalbari Assam Green Zone
47 Hailakandi Assam Green Zone
48 Cachar Assam Green Zone
49 Kamrup Assam Green Zone
50 Lakhimpur Assam Green Zone
51 Kamrup Metro Assam Green Zone
52 South SalmaraMancachar Assam Green Zone
53 Barpeta Assam Green Zone
54 Bongaigaon Assam Green Zone
55 Darrang Assam Green Zone
56 Dhemaji Assam Green Zone
57 Dibrugarh Assam Green Zone
58 Jorhat Assam Green Zone
59 KarbiAnglong Assam Green Zone
60 Kokrajhar Assam Green Zone
61 Nagaon Assam Green Zone
62 Dima Hasao Assam Green Zone
63 Sivasagar Assam Green Zone
64 Sonitpur Assam Green Zone
65 Tinsukia Assam Green Zone
66 Chi rang Assam Green Zone
67 Baksa Assam Green Zone
68 Udalguri Assam Green Zone
69 Biswanath Assam Green Zone
70 Majuli Assam Green Zone
71 Charaideo Assam Green Zone
72 Hojai Assam Green Zone
73 West KarbiAnglong Assam Green Zone
99 Sheikhpura Bihar Green Zone
100 Araria Bihar Green Zone
101 Jamui Bihar Green Zone
102 Katihar Bihar Green Zone
103 Khagaria Bihar Green Zone
104 Kishanganj Bihar Green Zone
105 Muzaffarpur Bihar Green Zone
106 Pashchim Champaran Bihar Green Zone
107 Saharsa Bihar Green Zone
108 Samastipur Bihar Green Zone
109 Sheohar Bihar Green Zone
110 Sitamarhi Bihar Green Zone
111 Supaul Bihar Green Zone
115 Surajpur Chhattisgarh Green Zone
116 Bilaspur Chhattisgarh Green Zone
117 Durg Chhattisgarh Green Zone
118 Rajnandgaon Chhattisgarh Green Zone
119 Ba star Chhattisgarh Green Zone
120 Dantewada Chhattisgarh Green Zone
121 Dhamtari Chhattisgarh Green Zone
122 Janjgir-Champa Chhattisgarh Green Zone
123 Jashpur Chhattisgarh Green Zone
124 Kanker Chhattisgarh Green Zone
125 Kabirdham Chhattisgarh Green Zone
126 Korea Chhattisgarh Green Zone
127 Mahasamund Chhattisgarh Green Zone
128 Raigarh Chhattisgarh Green Zone
129 Surguja Chhattisgarh Green Zone
130 Bijapur Chhattisgarh Green Zone
131 Narayanpur Chhattisgarh Green Zone
132 Sukma Chhattisgarh Green Zone
133 Kondagaon Chhattisgarh Green Zone
134 Baloda Bazar Chhattisgarh Green Zone
135 Gariyaband Chhattisgarh Green Zone
136 Balod Chhattisgarh Green Zone
137 Mungeli Chhattisgarh Green Zone
138 Balrampur Chhattisgarh Green Zone
139 Bemetara Chhattisgarh Green Zone
140 Dadra And Nagar Haveli Dadra And Nagar Haveli Green Zone
141 Daman Daman And Diu Green Zone
142 Diu Daman And Diu Green Zone
154 North Goa Goa Green Zone
155 South Goa Goa Green Zone
184 Morbi Gujarat Green Zone
185 Amreli Gujarat Green Zone
186 Porbandar Gujarat Green Zone
187 Junagadh Gujarat Green Zone
188 Devbhumi Dwarka Gujarat Green Zone
209 Mahendragarh Haryana Green Zone
210 Rewari Haryana Green Zone
217 Bilaspur Himachal Pradesh Green Zone
218 Kinnaur Himachal Pradesh Green Zone
219 Kullu Himachal Pradesh Green Zone
220 Lahul And Spiti Himachal Pradesh Green Zone
221 Mandi Himachal Pradesh Green Zone
222 Shimla Himachal Pradesh Green Zone
239 Pulwama Jammu And Kashmir Green Zone
240 Kishtwar Jammu And Kashmir Green Zone
241 Doda Jammu And Kashmir Green Zone
242 Poonch Jammu And Kashmir Green Zone
253 Chatra Jharkhand Green Zone
254 Dumka Jharkhand Green Zone
255 East Singhbum Jharkhand Green Zone
256 Godda Jharkhand Green Zone
257 Gumla Jharkhand Green Zone
258 Latehar Jharkhand Green Zone
259 Lohardaga Jharkhand Green Zone
260 Pakur Jharkhand Green Zone
261 Palamu Jharkhand Green Zone
262 Sahebganj Jharkhand Green Zone
263 Saraikela Kharsawan Jharkhand Green Zone
264 West Singhbhum Jharkhand Green Zone
265 Khunti Jharkhand Green Zone
266 Ramgarh Jharkhand Green Zone
283 Davangere Karnataka Green Zone
284 Udupi Karnataka Green Zone
285 Chamarajanagara Karnataka Green Zone
286 Chikkamagaluru Karnataka Green Zone
287 Chitradurga Karnataka Green Zone
288 Hassan Karnataka Green Zone
289 Haveri Karnataka Green Zone
290 Kodagu Karnataka Green Zone
291 Kolar Karnataka Green Zone
292 Koppa I Karnataka Green Zone
293 Raichur Karnataka Green Zone
294 Shivamogga Karnataka Green Zone
295 Ramanagara Karnataka Green Zone
296 Yadgir Karnataka Green Zone
309 Ernakulam Kerala Green Zone
310 Wayanad Kerala Green Zone
313 Lakshadweep District Lakshadweep Green Zone
342 Rewa Madhya Pradesh Green Zone
343 Ashoknagar Madhya Pradesh Green Zone
344 Rajgarh Madhya Pradesh Green Zone
345 Shivpuri Madhya Pradesh Green Zone
346 Anuppur Madhya Pradesh Green Zone
347 Balaghat Madhya Pradesh Green Zone
348 Bhind Madhya Pradesh Green Zone
349 Chhatarpur Madhya Pradesh Green Zone
350 Da oh Madhya Pradesh Green Zone
351 Datia Madhya Pradesh Green Zone
352 Guna Madhya Pradesh Green Zone
353 Jhabua Madhya Pradesh Green Zone
354 Katni Madhya Pradesh Green Zone
355 Mandia Madhya Pradesh Green Zone
356 Narsinghpur Madhya Pradesh Green Zone
357 Nee much Madhya Pradesh Green Zone
358 Panna Madhya Pradesh Green Zone
359 Satna Madhya Pradesh Green Zone
360 Sehore Madhya Pradesh Green Zone
361 Seoni Madhya Pradesh Green Zone
362 Sid hi Madhya Pradesh Green Zone
363 Umaria Madhya Pradesh Green Zone
364 Singrauli Madhya Pradesh Green Zone
365 Niwari Madhya Pradesh Green Zone
396 Osmanabad Maharashtra Green Zone
397 Washim Maharashtra Green Zone
398 Sindhudurg Maharashtra Green Zone
399 Gandia Maharashtra Green Zone
400 Gadchiroli Maharashtra Green Zone
401 Wardha Maharashtra Green Zone
402 Imphal West Manipur Green Zone
403 Thoubal Manipur Green Zone
404 Bishnupur Manipur Green Zone
405 Chandel Manipur Green Zone
406 Churachandpur Manipur Green Zone
407 Imphal East Manipur Green Zone
408 Senapati Manipur Green Zone
409 Tamenglong Manipur Green Zone
410 Ukhrul Manipur Green Zone
411 Kakching Manipur Green Zone
412 Kangpokpi Manipur Green Zone
413 Jiribam Manipur Green Zone
414 Nonev Manipur Green Zone
415 Pherzawl Manipur Green Zone
416 Tengnoupal Manipur Green Zone
417 Kamjong Manipur Green Zone
419 East Garo Hills Meghalaya Green Zone
420 West Jaintia Hills Meghalaya Green Zone
421 Ri Bhoi Meghalaya Green Zone
422 South Garo Hills Meghalaya Green Zone
423 West Garo Hills Meghalaya Green Zone
424 West Khasi Hills Meghalaya Green Zone
425 North Garo Hills Meghalaya Green Zone
426 East Jaintia Hills Meghalaya Green Zone
427 South West Khasi Hills Meghalaya Green Zone
428 South West Garo Hills Meghalaya Green Zone
429 Aizawl Mizoram Green Zone
430 Champhai Mizoram Green Zone
431 Kolasib Mizoram Green Zone
432 Lawngtlai Mizoram Green Zone
433 Lunglei Mizoram Green Zone
434 Mamit Mizoram Green Zone
435 Saiha Mizoram Green Zone
436 Serchhip Mizoram Green Zone
437 Hnahthial Mizoram Green Zone
438 Saitual Mizoram Green Zone
439 Khawzawl Mizoram Green Zone
440 Dimapur Nagaland Green Zone
441 Kohima Nagaland Green Zone
442 Mokokchung Nagaland Green Zone
443 Mon Nagaland Green Zone
444 Phek Nagaland Green Zone
445 Tuensang Nagaland Green Zone
446 Wokha Nagaland Green Zone
447 Zunheboto Nagaland Green Zone
448 Peren Nagaland Green Zone
449 Kiphire Nagaland Green Zone
450 Longleng Nagaland Green Zone
460 Cuttack Orrisa Green Zone
461 Puri Orrisa Green Zone
462 Anugul Orrisa Green Zone
463 Balangir Orrisa Green Zone
464 Bargarh Orrisa Green Zone
465 Boudh Orrisa Green Zone
466 Deogarh Orrisa Green Zone
467 Gajapati Orrisa Green Zone
468 Ganjam Orrisa Green Zone
469 Jagatsinghapu r Orrisa Green Zone
470 Jharsuguda Orrisa Green Zone
471 Kandhamal Orrisa Green Zone
472 Kendujhar Orrisa Green Zone
473 Malkangiri Orrisa Green Zone
474 Mayurbhanj Orrisa Green Zone
475 Nabarangpur Orrisa Green Zone
476 Nayagarh Orrisa Green Zone
477 Nuapada Orrisa Green Zone
478 Rayagada Orrisa Green Zone
479 Sambalpur Orrisa Green Zone
480 Sonepur Orrisa Green Zone
482 Karaikal Puducherry Green Zone
483 Mahe Puducherry Green Zone
484 Yanam Puducherry Green Zone
503 Rupnagar (Ropar) Punjab Green Zone
504 Fatehgarh Sahib Punjab Green Zone
505 Bathinda Punjab Green Zone
506 Fazilka Punjab Green Zone
534 Baran Rajasthan Green Zone
535 Bundi Rajasthan Green Zone
536 Ganganagar Rajasthan Green Zone
537 Jalore Rajasthan Green Zone
538 Sirohi Rajasthan Green Zone
539 Pratapgarh Rajasthan Green Zone
540 North District Sikkim Green Zone
541 East District Sikkim Green Zone
542 South District Sikkim Green Zone
543 West District Sikkim Green Zone
580 Krishnagiri Tamil Nadu Green Zone
605 Peddapalli Telangana Green Zone
606 Nagarkurnool Telangana Green Zone
607 Mulugu Telangana Green Zone
608 BhadradriKothagudem Telangana Green Zone
609 Mahabubabad Telangana Green Zone
610 Siddipet Telangana Green Zone
611 Warangal Rural Telangana Green Zone
612 Wanaparthy Telangana Green Zone
613 YadadriBhuvanagiri Telangana Green Zone
616 Dhalai Tripura Green Zone
617 South Tripura Tripura Green Zone
618 West Tripura Tripura Green Zone
619 Khowai Tripura Green Zone
620 Sepahijala Tripura Green Zone
621 Unakoti Tripura Green Zone
677 Barabanki Uttar Pradesh Green Zone
678 Kheri Uttar Pradesh Green Zone
679 Hathras Uttar Pradesh Green Zone
680 Maharajganj Uttar Pradesh Green Zone
681 Shahjahanpur Uttar Pradesh Green Zone
682 Ambedkar Nagar Uttar Pradesh Green Zone
683 BaIlia Uttar Pradesh Green Zone
684 Chandauli Uttar Pradesh Green Zone
685 Chitrakoot Uttar Pradesh Green Zone
686 Deoria Uttar Pradesh Green Zone
687 Farrukhabad Uttar Pradesh Green Zone
688 Fatehpur Uttar Pradesh Green Zone
689 Hamirpur Uttar Pradesh Green Zone
690 Kanpur Dehat Uttar Pradesh Green Zone
691 Kushi Nagar Uttar Pradesh Green Zone
692 Lalitpur Uttar Pradesh Green Zone
693 Mahoba Uttar Pradesh Green Zone
694 Siddharth Nagar Uttar Pradesh Green Zone
695 Sonbhadra Uttar Pradesh Green Zone
696 Amethi Uttar Pradesh Green Zone
700 Udam Singh Nagar Uttarakhand Green Zone
701 Almora Uttarakhand Green Zone
702 Pauri Garhwal Uttarakhand Green Zone
703 Bageshwar Uttarakhand Green Zone
704 Chamoli Uttarakhand Green Zone
705 Champawat Uttarakhand Green Zone
706 Pithoraga rh Uttarakhand Green Zone
707 RudraPrayag Uttarakhand Green Zone
708 Tehri Garhwal Uttarakhand Green Zone
709 Uttar Kashi Uttarakhand Green Zone
725 Dinajpur Uttar West Bengal Green Zone
726 Bankura West Bengal Green Zone
727 Birbhum West Bengal Green Zone
728 Coochbehar West Bengal Green Zone
729 Dinajpur Dakshin West Bengal Green Zone
730 Purulia West Bengal Green Zone
731 Alipurduar West Bengal Green Zone
732 Jhargram West Bengal Green Zone
zones_data = zones[['State','Zone','District']]
zones_data = zones_data.dropna()
fig = px.treemap(zones_data, path=['State','Zone','District'], color='Zone',
                 color_discrete_map={'(?)':'#6A6E68','Green Zone':'#00FF00', 'Red Zone':'#E12828', 'Orange Zone':'#C96800'},
                 hover_data=['Zone'])
fig.update_layout(margin=dict(l=0,r=0,b=0,t=0,pad=0),
                  paper_bgcolor="white",height= 600,
                  legend=dict(x=.825,y=.98),
                  font_size=20)
fig.show()

Prediction

Logistic curve is used to predict future behavior of the total number of confirmed cases

  • L (the maximum number of confirmed cases) = 250000 taken from the US example (this is from long time obsolete now)
  • k (growth rate) = 0.25 approximated value from most of the countries
  • x0 (the day of the inflexion) = 80 approximated

The curve being:

y=L/(1+e−k(x−x0))+1

import scipy

def logistic(x, L, k, x0):
    return L / (1 + np.exp(-k * (x - x0))) + 1

d_df = case_data.groupby('date').max().reset_index()[['date','confirmed']]

def plot_logistic_fit_data(d_df, title, p0):
    d_df = d_df.sort_values(by=['date'], ascending=True)
    d_df['x'] = np.arange(len(d_df)) + 1
    d_df['y'] = d_df['confirmed']

    x = d_df['x']
    y = d_df['y']

    c2 = scipy.optimize.curve_fit(logistic,  x,  y,  p0=p0 )
    #y = logistic(x, L, k, x0)
    popt, pcov = c2

    x = range(1,d_df.shape[0] + int(popt[2]))
    y_fit = logistic(x, *popt)
    
    p_df = pd.DataFrame()
    p_df['x'] = x
    p_df['y'] = y_fit.astype(int)

    print("Predicted L (the maximum number of confirmed cases): " + str(int(popt[0])))
    print("Predicted k (growth rate): " + str(float(popt[1])))
    print("Predicted x0 (the day of the inflexion): " + str(int(popt[2])) + "")

    x0 = int(popt[2])
    
    traceC = go.Scatter(x=d_df['x'], y=d_df['y'],name="Confirmed",marker=dict(color="Red"),
                        mode = "markers+lines",text=d_df['confirmed'],)

    traceP = go.Scatter(x=p_df['x'], y=p_df['y'],name="Predicted",marker=dict(color="blue"),
                        mode = "lines",text=p_df['y'],)

    trace_x0 = go.Scatter(x = [x0, x0], y = [0, p_df.loc[p_df['x']==x0,'y'].values[0]],
                         name = "X0 - Inflexion point",marker=dict(color="black"),
                         mode = "lines",text = "X0 - Inflexion point")

    data = [traceC, traceP, trace_x0]

    layout = dict(title = 'Cumulative Conformed cases and logistic curve projection',
          xaxis = dict(title = 'Day since first case', showticklabels=True), 
          yaxis = dict(title = 'Number of cases'),
          hovermode = 'x',plot_bgcolor='rgb(275, 270, 273)')
    
    fig = go.Figure(dict(data=data, layout=layout))
    fig.show()
    
L = 250000
k = 0.25
x0 = 100
p0 = (L, k, x0)
plot_logistic_fit_data(d_df, 'India',p0)
Predicted L (the maximum number of confirmed cases): 449696
Predicted k (growth rate): 0.05027399698692316
Predicted x0 (the day of the inflexion): 160

Fitting an exponential curve

The parameters for the curve are:

  • A - the constant multiplier for the exponential
  • B - the multiplier for the exponent

The curve is thus:

y=AeBx

import datetime
import scipy
p0 = (0,0)
def plot_exponential_fit_data(d_df, title, delta, p0):
    d_df = d_df.sort_values(by=['date'], ascending=True)
    d_df['x'] = np.arange(len(d_df)) + 1
    d_df['y'] = d_df['confirmed']

    x = d_df['x'][:-delta]
    y = d_df['y'][:-delta]

    c2 = scipy.optimize.curve_fit(lambda t,a,b: a*np.exp(b*t),  x,  y,  p0=p0)

    A, B = c2[0]
    print(f'(y = Ae^(Bx)) A: {A}, B: {B}')
    x = range(1,d_df.shape[0] + 1)
    y_fit = A * np.exp(B * x)
    
    traceC = go.Scatter( x=d_df['x'][:-delta], y=d_df['y'][:-delta],name="Confirmed (included for fit)",
                        marker=dict(color="Red"),mode = "markers+lines",text=d_df['confirmed'])

    traceV = go.Scatter(x=d_df['x'][-delta-1:], y=d_df['y'][-delta-1:],name="Confirmed (validation)",
                        marker=dict(color="blue"),mode = "markers+lines",text=d_df['confirmed'])
    
    traceP = go.Scatter(x=np.array(x), y=y_fit,name="Projected values (fit curve)",marker=dict(color="green"),
                        mode = "lines",text=y_fit,
    )

    data = [traceC, traceV, traceP]

    layout = dict(title = 'Cumulative Conformed cases and exponential curve projection',
          xaxis = dict(title = 'Day since first case', showticklabels=True), 
          yaxis = dict(title = 'Number of cases'),plot_bgcolor='rgb(275, 270, 273)',
          hovermode = 'x')

    fig = go.Figure(dict(data=data, layout=layout))
    fig.show()

p0 = (40, 0.2)
plot_exponential_fit_data(d_df, 'I', 7, p0)
(y = Ae^(Bx)) A: 406.67050202302863, B: 0.040128157030637795